package control;
import comunicacion.InterfazClienteServidor;
import java.util.logging.Level;
import java.util.logging.Logger;
import pantallas.*;
import estado.EstadoCliente;
public class ManejadorUnirsePartida {

/************atributos*******************************************/
    private ManejadorPrincipal mp;
    private ManejadorMensajesSalida mms;
    private ManejadorMensajesEntrada mme;
    private PantallaUnirsePartida pantallaUnirsePartida;
    private PantallaUnidoPartida pantallaUnidoPartida;
    private EstadoCliente estadoCliente;
    private InterfazClienteServidor interfazClienteServidor;

  //  private boolean partidaUnida;

    private int tipoPersonaje;
    private String nombre;
    private String ip;

/****************************************************************/


/************métodos**********************************************/
    public ManejadorUnirsePartida(ManejadorPrincipal mp,ManejadorMensajesEntrada mme, ManejadorMensajesSalida mms) {
        this.mp = mp;
        this.mms = mms;
        this.mme = mme;
        estadoCliente = new EstadoCliente();
        estadoCliente.setIngresandoPartida();
        this.mme.setManejadorUnirsePartida(this);
        pantallaUnirsePartida=new PantallaUnirsePartida (this); //tiene un boton aceptar para unirse a la partida (una vez ingresado los datos) y un boton cancelar para volver a la PantallaPrincipal.
    }

    public void generadorUnionPartida() {
        tipoPersonaje = pantallaUnirsePartida.getTipoPersonaje(); //copia los valores ingresados por el usuario de la PantallaUnirsePartida.
        nombre = pantallaUnirsePartida.getnombre();
        ip = pantallaUnirsePartida.getIP();
            if(ipValido(ip)){
                interfazClienteServidor = new InterfazClienteServidor(ip, 8001, estadoCliente, mme, mms);
                try {
                    Thread.sleep(100);
                    if (interfazClienteServidor.getConexionCreada())
                        mms.MsjUnirsePartida (tipoPersonaje, nombre, ip); //le envia los datos de la partida a unirse al ManejadorMensajesSalida.
                    else {
                        Thread.sleep(5000);
                        if (interfazClienteServidor.getConexionCreada())
                            mms.MsjUnirsePartida (tipoPersonaje, nombre, ip); //le envia los datos de la partida a unirse al ManejadorMensajesSalida.
                        else{
                            System.out.println("El servidor no responde..");
                            new PantallaError("El servidor no responde..");
                        }
                    }
                } catch (InterruptedException ex) {
                    Logger.getLogger(ManejadorUnirsePartida.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        else{
            new PantallaError("Error en ip!!");
            System.out.println("Error en ip!!");
        }
    }

    private boolean ipValido(String ip){
        return (ip.matches("^[\\d]{1,3}\\.[\\d]{1,3}\\.[\\d]{1,3}\\.[\\d]{1,3}$"))||(ip.matches("localhost"));
    }

    public void recibeUnidoPartida (boolean partidaUnida) {
       // this.partidaUnida = partidaUnida;
        if (partidaUnida) {
            pantallaUnirsePartida.ocultarPantalla();
            pantallaUnidoPartida = new PantallaUnidoPartida(this);  //solo tiene el mensaje y espera a que inicie la partida.
        }
        //chequeo el msjACK enviado por el servidor y contesto abriendo una pantalla segun si se unio o no la partida con exito.
        else new PantallaError("Error al unirse a la partida");
    }

    public void ocultarPantallaUnido(){
        pantallaUnidoPartida.ocultarPantalla();
    }

    public void mostrarPantallaPrincipal(){
        mp.mostrarPantallaPrincipal();
    }

    public void salir(){
        mms.MsjDesconectarsePartida();
        System.exit(0);
    }
/****************************************************************/
}

